package com.sgb.capital.view.ui.adapter;

import com.sgb.capital.view.ui.fragment.CommodityListFragment;

import java.util.List;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.PagerAdapter;

/**
 * 作者:张磊
 * 日期:2021/11/22 0022
 * 说明:
 */
public class OutterPagerAdapter extends FragmentPagerAdapter {
    private int mSize;
    private List<String> mCitys;
    private long baseId = 0;

    public OutterPagerAdapter(FragmentManager fm, List<String> list) {
        super(fm);
        mCitys = list;
        mSize = list == null ? 0 : list.size();
    }

    @Override
    public int getCount() {
        return mSize;
    }

    //只有通过tag查找碎片的时候没找到，才会调用这个方法。从这个方法里得到fragment然后add进
    //ViewPager中。
    @Override
    public Fragment getItem(int position) {
        return CommodityListFragment.newInstance(mCitys.get(position));
    }

    //this is called when notifyDataSetChanged() is called
    //重建所有item，新建item的时候会调用instantiateItem。
    @Override
    public int getItemPosition(Object object) {
        // refresh all fragments when data set changed
        return PagerAdapter.POSITION_NONE;
    }

    //每次在instantiateItem中调用这个的时候，都会是不同的id。适配器发现找不到之前的碎片，
    //就会重新调用getItem来新建碎片。
    //这个方法是适配器用来组装tag的一部分。只要改变了它，也就改变了tag。
    @Override
    public long getItemId(int position) {
        // give an ID different from position when position has been changed
        return baseId + position;
    }

    /**
     * 删除之后，在调用notifyDataSetChanged之前，先调用这个notifyChangeInPosition(1)。
     * 改变tag。
     */
    public void notifyChangeInPosition(int n) {
        // shift the ID returned by getItemId outside the range of all previous fragments
        baseId += getCount() + n;
    }

    // 自己写的一个方法用来添加数据这个可是重点啊
    public void setList(List<String> list) {
        this.mCitys = list;
        mSize = list == null ? 0 : list.size();
    }
}